package com.mask.im.server.netty.action;

import com.mask.im.server.netty.enums.IMActionEnum;
import com.mask.im.server.netty.action.handler.IMChatHandler;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @className：MaskChatContext
 * @Description: 用于管理和使用策略
 * @Author：jian
 * @Date：2025/8/29 00:41
 */
@Log4j2
@Component
public class IMChatHandlerFactory {
    // 存储所有支付策略的容器
    private final Map<IMActionEnum, IMChatHandler> handlers = new HashMap<>();

    // 静态初始化策略，避免每次使用时创建对象
    @Autowired
    public IMChatHandlerFactory(List<IMChatHandler> nodeHandlers) {
        for (IMChatHandler handler : nodeHandlers) {
            handlers.put(handler.getAction(), handler);
            log.info("注册消息处理器: {} -> {}", handler.getAction(), handler.getClass().getSimpleName());
        }
        log.info("消息处理器初始化完成，共注册 {} 个处理器", handlers.size());

    }

    // 根据类型获取对应的策略
    public IMChatHandler getHandler(IMActionEnum action) {
        if (action == null) {
            log.warn("请求的处理器类型为空");
            throw new IllegalArgumentException("处理器类型不能为空");
        }
        IMChatHandler handler = handlers.get(action);
        if (handler == null) {
            log.error("未找到对应的消息处理器: {}", action);
            throw new RuntimeException("未找到节点处理器: " + action);
        }
        return handler;
    }
}
